Databaze Firebird a indexy
Otázka od: Kopac Jan Bc.
11. 5. 2004 8:59
Dobry den,
mam dotaz:
mam tabulku s nekolika sloupci. Ani jeden sloupec vsak neobsahuje unikatni
polozky. Nesmim polozky v tabulce menit.
Jak mam vytvorit primarni klic. Mam pridat dalsi sloupec,do ktereho vlozim
unikatni polozky( treba cisla 1-n), nebo nemam vytvaret
zadny primarni index a pouzit generator a trigger?
Tabulka neni s nicim propojena, ale nevim jestli do budoucna nebude...
p.s.: byl jsem o to pozadan, ale v teto problematice se moc nevyznam...
dekuji za kazdy postreh...
Odpovedá: Slavomir Skopalik
11. 5. 2004 9:28
> mam tabulku s nekolika sloupci. Ani jeden sloupec vsak
> neobsahuje unikatni polozky. Nesmim polozky v tabulce menit.
To je sice hezke, ale jak pak identifikujes konretni zaznam ?
> Jak mam vytvorit primarni klic. Mam pridat dalsi sloupec,do
> ktereho vlozim unikatni polozky( treba cisla 1-n), nebo nemam
> vytvaret zadny primarni index a pouzit generator a trigger?
Tohle neni zalezitost programovani, ale navrhu, tj. musis
si ujasnit co od te tabulky ocekavas.
Primarni klic by sice mel vzdy existovat, ale v oduvodnitelnych
pripadech lze toto pravidlo porusit.
Primarni klic muze byt i pres vice sloupcu.
Slavek
Odpovedá: Pavel Cisar
11. 5. 2004 10:54
Haj hou!
On 11 May 2004 at 9:48, Kopac Jan Bc. wrote:
> mam tabulku s nekolika sloupci. Ani jeden sloupec vsak neobsahuje
> unikatni polozky. Nesmim polozky v tabulce menit. Jak mam vytvorit
> primarni klic. Mam pridat dalsi sloupec,do ktereho vlozim unikatni
> polozky( treba cisla 1-n), nebo nemam vytvaret zadny primarni index a
> pouzit generator a trigger?
Pridat unikatni polozku, napr. cislo plnene z generatoru je
jednoduche a zaroven rozumne.
S pozdravem
Pavel Cisar ( ICQ: 89017288)
Mobil: 724 281429
http://www.ibphoenix.cz
Vse co potrebujete pro Firebird a InterBase
Odpovedá: Fedor 'fi0dor' Tirsel
11. 5. 2004 11:43
: Dobry den,
Zdravim Vas,
: mam tabulku s nekolika sloupci. Ani jeden sloupec vsak neobsahuje unikatni
: polozky. Nesmim polozky v tabulce menit.
: Jak mam vytvorit primarni klic. Mam pridat dalsi sloupec,do ktereho vlozim
: unikatni polozky( treba cisla 1-n), nebo nemam vytvaret
: zadny primarni index a pouzit generator a trigger?
:
: Tabulka neni s nicim propojena, ale nevim jestli do budoucna nebude...
:
: p.s.: byl jsem o to pozadan, ale v teto problematice se moc nevyznam...
Jedna moznost je vytvorit zlozeny primarnu kluc (z viac stlpcov) a dalsia
moznost je vytvorit novy stlpec, kde si budete generatorom (pri vkladani)
nejaku sekvenciu cisiel (1..n). Pokial neviete, ci tabulka nebude do
buducna prepojena s inou, tak by som Vam odporucil radsej si pridat ten novy
stlpec a
generovat si do neho postupnost cisiel (posloupnost) -- nic tim nestratite a
casom mozno ziskate ;)
Priklad:
/* vytvorim novy stlpec */
ALTER TABLE tablename ADD colname INTEGER;
/* vytvorim generator a odpovedajuci trigger */
CREATE GENERATOR gen_colname;
SET GENERATOR gen_colname TO 1;
CREATE TRIGGER colname_autoinc FOR tablename
ACTIVE BEFORE INSERT POSITION 0 AS
BEGIN
IF (NEW.colname is NULL) THEN
NEW.colname = GEN_ID(gen_colname, 1);
END;
/* vytvorim primarny kluc */
ALTER TABLE tablename ADD CONSTRAINT pk_colname PRIMARY KEY (colname);
S pozdravom...
--
Fedor 'fi0dor' Tirsel
www.fi0dor.info